import { AppModel } from '../../../../model/AppModel';
import { createUIWidgetMenu } from '../BlockPackage'

export default {

    category: Blockly.Categories.operators ,
    color: [
        Blockly.Colours.operators.primary,
        Blockly.Colours.operators.secondary,
        Blockly.Colours.operators.tertiary
    ] ,

    previousStatement: false ,
    nextStatement: false ,
    hat: false ,

    extensions: ['colours_operators', 'output_number'] ,

    init(model: AppModel) {
        this.appendDummyInput()
            .appendField("摇杆")
            .appendField(createUIWidgetMenu(model, "Rocker"), 'uirocker')
            .appendField(new Blockly.FieldDropdown(() => {
                return [
                    ['X轴' , 'x'] ,
                    ['Y轴' , 'y'] ,
                    ['角度' , 'angle'] ,
                    ['弧度' , 'radian'] ,
                    ['力度' , 'force'] ,
                ]
            }), 'var')
            .appendField("数值")
        Blockly.Extensions.apply("output_number", this)
    } ,

    run (args: any, util: any, runtime: any) {
        return

        // let raw = runtime.uiwidgetEvent[args.uirocker] || {x:0, y:0}
        
        // if(args.var=='x' || args.var=='y') {
        //     return raw[args.var]
        // }
        // // 力度
        // if(args.var=='force') {
        //     return Math.sqrt( raw.x*raw.x + raw.y*raw.y )
        // }
        // // 角度/弧度值
        // else {
        //     let rad = Math.atan( raw.y/raw.x )
        //     rad*= -1 // 转换为顺时针

        //     if( raw.y<0 ) {
        //         // 第二象限
        //         if(raw.x<0) {
        //             rad = Math.PI + rad
        //         }
        //     }
        //     else {
        //         // 第三象限
        //         if(raw.x<0) {
        //             rad+= Math.PI
        //         }
        //         // 第四象限
        //         else {
        //             rad = 2*Math.PI + rad
        //         }
        //     }

        //     if(args.var=='radian')
        //         return rad
        //     else {
        //         return 180 * rad/Math.PI
        //     }

        // }
    } ,

    coder: {
        JavaScript(block: any, coder: any, model: AppModel) {
            let wid = block.getFieldValue('uirocker')
            let widget = model.ui.mapWidgets[wid]

            let vartype = block.getFieldValue('var')

            // 原始值
            if(vartype=='x' || vartype=='y') {
                return [`be.var["${widget.name}_${vartype}"]`, coder.ORDER_ATOMIC]
            }

            // 弧度
            else if(vartype=='radian') {
                return [`require("besdk/util").xy2rad(be.var["${widget.name}_x"],be.var["${widget.name}_y"])`, coder.ORDER_ATOMIC]
            }
            // 角度
            else if(vartype=='angle') {
                return [`(require("besdk/util").xy2rad(be.var["${widget.name}_x"],be.var["${widget.name}_y"])*180/Math.PI)`, coder.ORDER_ATOMIC]
            }

            // 力度
            else if(vartype=='force') {
                return [`Math.sqrt( be.var["${widget.name}_x"]**2 + be.var["${widget.name}_y"]**2 )`, coder.ORDER_ATOMIC]
            }
        }
    }
}


//
